#设置编译器
CC=gcc
#debug文件夹里的makefile文件需要最后执行，所以这里需要执行的子目录要排除debug文件夹，这里使用awk排除了debug文件夹，读取剩下的文件夹
#SUBDIRS=$(shell ls -l | grep ^d | awk '{if($$9 != "debug") print $$9}')
SUBDIRS=cap1 cap2 cap3 cap4
#无需下一行的注释代码，因为我们已经知道debug里的makefile是最后执行的，所以最后直接去debug目录下执行指定的makefile文件就行，具体下面有注释
#DEBUG=$(shell ls -l | grep ^d | awk '{if($$9 == "debug") print $$9}')
#记住当前工程的根目录路径
ROOT_DIR=$(shell pwd)
#最终bin文件的名字，可以更改为自己需要的
BIN=myapp
#目标文件所在的目录
OBJS_DIR=debug/obj
#bin文件所在的目录
BIN_DIR=debug/bin
#获取当前目录下的c文件集，放在变量CUR_SOURCE中
CUR_SOURCE=${wildcard *.c}
#将对应的c文件名转为o文件后放在下面的CUR_OBJS变量中
CUR_OBJS=${patsubst %.c, %.o, $(CUR_SOURCE)}
#将以下变量导出到子shell中，本次相当于导出到子目录下的makefile中
export CC BIN OBJS_DIR BIN_DIR ROOT_DIR
#注意这里的顺序，需要先执行SUBDIRS最后才能是DEBUG
#all:$(SUBDIRS) $(CUR_OBJS) DEBUG
#all:$(SUBDIRS) $(CUR_OBJS) DEBUG
all:cap4_dir 
#递归执行子目录下的makefile文件，这是递归执行的关键
#cap4_dir:
	#make -C cap4
#$(SUBDIRS):
$(SUBDIRS):
	$(MAKE) -C $(SUBDIRS)
cap4_dir:
	$(MAKE) -C cap4
#DEBUG:ECHO
#    #直接去debug目录下执行makefile文件
#    make -C debug
#ECHO:
#    @echo $(SUBDIRS)
#将c文件编译为o文件，并放在指定放置目标文件的目录中即OBJS_DIR
#$(CUR_OBJS):%.o:%.c
#    $(CC) -c $^ -o $(ROOT_DIR)/$(OBJS_DIR)/$@
#CLEAN:
#    @rm $(OBJS_DIR)/*.o
#    @rm -rf $(BIN_DIR)/*
#


#复制代码
#
#上面的注释很详细了，具体的命令如果不清楚，自己可以google一下，譬如：wildcard patsubst awk等
#
#读者可以根据自己的需要更改自己的debug目录和目标文件目录和bin文件目录
#
#其他子目录下的Makefile文件的内容如下：
#复制代码
#
# 1 #子目录的Makefile直接读取其子目录就行
# 2 SUBDIRS=$(shell ls -l | grep ^d | awk '{print $$9}')
# 3 #以下同根目录下的makefile的相同代码的解释
# 4 CUR_SOURCE=${wildcard *.c}
# 5 CUR_OBJS=${patsubst %.c, %.o, $(CUR_SOURCE)}
# 6 all:$(SUBDIRS) $(CUR_OBJS)
# 7 $(SUBDIRS):ECHO
# 8     make -C $@
# 9 $(CUR_OBJS):%.o:%.c
#10     $(CC) -c $^ -o $(ROOT_DIR)/$(OBJS_DIR)/$@
#11 ECHO:
#12     @echo $(SUBDIRS)
#
#
#ifneq ($(KERNELRELEASE),)
##mymodule-objs:= mymodule 1.o mymodule 2.o
##obj-m+=mymodule.o
#
##obj-m+=__module_address.o
##obj-m+=__module_text_address.o
##obj-m+=hello.o
##obj-m+=__print_symbol.o
##obj-m+=__symbol_get.o
##obj-m+=__symbol_put.o
##obj-m+=find_module.o
##obj-m+=test_module.o
##obj-m+=find_symbol.o
##obj-m+=module_is_live.o
##obj-m+=module_put.o
##obj-m+=module_refcount.o
##obj-m+=sprint_symbol.o
##obj-m+=try_module_get.o
##
##obj-m+=__task_pid_nr_ns.o
##obj-m+=find_pid_ns.o
##obj-m+=find_vpid.o
##obj-m+=get_pid.o
##obj-m+=get_task_mm.o
##obj-m+=ns_of_pid.o
##obj-m+=pid_nr.o
##obj-m+=pid_task.o
##obj-m+=pid_vnr.o
##obj-m+=task_active_pid_ns.o
##obj-m+=task_tgid_nr_ns.o
##obj-m+=__wake_up.o
#
#else
#
#CC=gcc
##KERNELDIR:=/home/gg/huimu/bsp/linux-2.6.35.4
##KDIR:=/home/hh/work_imx6/linux-3.0.35
#PWD :=$(shell pwd)
#KVER :=$(shell uname -r)
##KDIR :=/home/gg/018_src/kernel/debian_kernel/linux-3.16.39
##KDIR :=/home/gg/018_src/kernel/linux-3.16.39
#KDIR :=/lib/modules/$(KVER)/build
#
#all:
#	$(MAKE) -C $(KDIR) M=$(PWD)
##make -C $(KDIR) M=$(PWD) modules
#clean:
#	rm -rf *.o *.mod.c *.ko *.symvers *.order *.markers *~
#endif
#
